"""
使用模型类序列化器
"""


from rest_framework import serializers
from .models import *

# serializers.Serializer ---- 自定义序列化器所继承的
# serializers.ModelSerializer ---- 专门针对模型类数据的序列化器


# 定义一个针对BookInfo的模型类序列化器
class BookInfoModelSerializer(serializers.ModelSerializer):
    # 可以通过在序列化器中手动自定映射的字段

    # 对于非主键的隐藏字段
    # heros = serializers.StringRelatedField(many=True)

    # 手动定义的字段，会覆盖自动映射的字段
    # btitle = serializers.CharField(min_length=2, max_length=20, required=True)

    class Meta:
        model = BookInfo # 声明当前序列化器操作的目标模型类
        fields = "__all__" # 声明操作的模型类的字段为所有：把所有的字段映射到序列化器中
        # fields = ['id', 'btitle', 'bpub_date', 'bread'] # 指定字段映射
        # exclude = ['image'] # 除了image字段，其他的字段映射到序列化器中

        # 对模型类序列化器自动构建的约束条件进行修订
        extra_kwargs = {
            "bread": {"min_value": 0}, # 把bread字段的min_value约束条件设置为0
            # "required": True,
        }

        # 批量地把一些字段设置为read_only=True
        # read_only_fields = ['id', 'bread']


class HeroInfoModelSerializer(serializers.ModelSerializer):
    # 外间关联字段，自动映射的类型是PrimaryKeyRelatedField

    # 关联对象的主键隐藏字段不会自动映射
    # hbook_id = serializers.IntegerField()

    class Meta:
        model = HeroInfo
        fields = "__all__"
